home *** CD-ROM | disk | FTP | other *** search
/ CU Amiga Super CD-ROM 19 / CU Amiga Magazine's Super CD-ROM 19 (1998)(EMAP Images)(GB)[!][issue 1998-02].iso / CUCD / Programming / LEDA / incl / LEDA.020+881 / set.h < prev    next >
C/C++ Source or Header  |  1994-08-05  |  2KB  |  79 lines

  1. /*******************************************************************************
  2. +
  3. +  LEDA  3.1c
  4. +
  5. +
  6. +  set.h
  7. +
  8. +
  9. +  Copyright (c) 1994  by  Max-Planck-Institut fuer Informatik
  10. +  Im Stadtwald, 6600 Saarbruecken, FRG     
  11. +  All rights reserved.
  12. *******************************************************************************/
  13.  
  14.  
  15. #ifndef LEDA_SET_H
  16. #define LEDA_SET_H
  17.  
  18. //------------------------------------------------------------------------------
  19. // set             
  20. //------------------------------------------------------------------------------
  21.  
  22. #include <LEDA/basic.h>
  23. #include <LEDA/impl/rs_tree.h>
  24.  
  25.  
  26. template<class type>
  27.  
  28. class _CLASSTYPE set : public rs_tree {
  29.  
  30. rs_tree_item iterator;
  31.  
  32. int  int_type()              const { return INT_TYPE(type); }
  33. int  cmp(GenPtr x, GenPtr y) const
  34.                            { return compare(ACCESS(type,x),ACCESS(type,y)); }
  35. void clear_key(GenPtr& x)   const { Clear(ACCESS(type,x));   }
  36. void copy_key(GenPtr& x)    const { x = Copy(ACCESS(type,x));}
  37.  
  38. public:
  39. virtual void insert(type y)       { rs_tree::insert(Convert(y),0); }
  40. virtual void del(type y)          { rs_tree::del(Convert(y)); }
  41. virtual bool member(type y) const { return (rs_tree::lookup(Convert(y))!=nil); }
  42. virtual type choose()       const { return ACCESS(type,rs_tree::key(rs_tree::min())); }
  43.  
  44.  
  45. GenPtr first_item()  { return rs_tree::first_item(); }
  46. void loop_to_succ(GenPtr& x) { x=rs_tree::next_item(rs_tree_item(x)); }
  47.  
  48. GenPtr forall_loop_test(GenPtr it, type& y) const
  49. { if (it) y = ACCESS(type,rs_tree::key(rs_tree_item(it)));
  50.   return it;
  51.  }
  52.  
  53. // old-style iteration
  54.  
  55. void start_iteration()  { iterator = rs_tree::first_item(); }
  56.  
  57. bool read_iterator(type& x) 
  58. { if (iterator)
  59.     { x = ACCESS(type,rs_tree::key(iterator));
  60.       return true;
  61.      }
  62.   else
  63.      return false;
  64.  }
  65.  
  66. void move_to_succ()  { iterator = rs_tree::next_item(iterator); }
  67.  
  68. set<type>& operator=(const set<type>& S) { rs_tree::operator=(S); return *this;}
  69.  
  70.  set() {}
  71.  set(const set<type>& S) : rs_tree(S) {}
  72.  
  73. ~set() { clear(); }
  74. };
  75.  
  76. #endif
  77.  
  78.